# -*- coding:utf-8 -*-
"""
@Time:  2021/7/27 20:41
@Auth:  Mrs.Gou 
@Function:  四大数据类型
"""

# 基本数据类型
# 整数 int
x = 1
print(x)
print(type(x))

# 小数 float 双精度   实际上都是java中的double   小数点最多15位  16位是不精准的，所以是无效数字
y = 1.11111111111111111111111111111
print(type(y))
print(y)

# 布尔类型bool  True/False (1/0)
b = True
print(type(b))
print(b)
print(b == 1)
print(b == 2)
print(int(b))

# 字符串 str
s = 'hdushciahcl,False.01,2'
print(type(s))
print(s)

# 互转 int(),float(),str()
# 互斥：对不同类型进行操作
x = 1
y = 1.1
print(float(x))
print(int(y))
# True/False (1/0)
b = False
print(int(b))

# bool值附加：False对应的情况
# 所有的空和零：None、''、0、0.0、[]、()、{}
# print(bool(None),bool(''),bool(0),bool(0.0),bool([]),bool(()),bool({}))
# 任何非0的数转成bool值都是True
print(bool(-1))

# None,空类型（真正意义上的空，内存里什么都没有）
# 除了可以转bool值，和所有其它类型互斥
a = None
# int(a)就会报错

# 字符串转其它类型（必须是纯其它类型的字符串，才可以）
# 字符串纯数字是可以转的
s = '1'
print(float(s))
print(int(s))

# 如果字符串不是整数，转整数是会报错的
s = '1.1'
# print(int(s))会报错
print(float(s))

# 字符串是bool类型
s = 'False'
# print(float(s)) 报错
print(bool(s))

# 任何类型都可以转成字符串
print(str(1), str(1.1), str(False), str(None), str(bool))

# 互斥
# print(1 + '1')会报错
# 数字类型不互斥
print(1 + int('1'))
print(1+False)
# 字符串，None和任何其它类型互斥（注意任何其它类型都可以转字符串）
print(str(1), str(1.1), str(False), str(None), str(bool))

# 转义 \
# 特殊字符含义转普通字符含义
s = 'djskdn\'dodsk'
print(s)

# 普通字符转特殊含义
s = 'mdk\n\tmkl'
print(s)

# 互斥 前三种统称为数字类型  字符串是字符串
# 数字类型和字符串是不能在运算里面共同操作
print(x + y + b)
# 报错
# print(x + s)

# 互转
x = 1
s = 1.11
# int(小数) 代表取整
print(x + int(s))
# 整数可以转为小数
print(float(x))

# 字符和其它类型的转化
# 原则必须符合语法规则
s = '1.11'
print(x + float(s))
# 数字转为字符串
print(str(x) + s)

# bool值的转换
# 0，''，None都是转为False  其它的都是True
s = ''
print(bool(s))
print(bool(-1))

# python变量定义是通过赋值来完成的 id查看内存空间
x = 1
print(id(x))
x = 2
print(id(x))
